package protectora.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import com.sun.org.apache.xerces.internal.impl.dv.dtd.NMTOKENDatatypeValidator;

import protectora.Gato;
import protectora.Perro;

public class PerroDAOImpl extends AnimalesDAOImpl implements PerroDAO {

	public List<Perro> getPerros(String idProtectora, String idCasaAcogida,
			String tamano, String raza) {

		List<Perro> resul = new LinkedList<Perro>();

		Connection conn = ConnectionManager.getInstance().checkOut();

		ResultSet rs = null;
		PreparedStatement st = null;

		try {
			String sql = "SELECT DISTINCT a.IdAnimal, a.Nombre, a.Edad, a.FechaEntrada, a.Sociable, a.Enfermo ,g.Tamaño,g.Raza";
			sql += " FROM animales a, protectora p, codigopostal cp, casadeacogida ca, perro g";
			sql += " where a.IdProtectora = p.IdProtectora";
			sql += " and a.IdCasaDeAcogida = ca.IdCasaDeAcogida";
			sql += " and a.IdAnimal = g.IdAnimal";
			sql += " and p.IdProtectora = " + idProtectora;
			sql += " and a.IdCasaDeAcogida= " + idCasaAcogida;
			sql += " and a.Adoptado = false";
			if (!raza.equals("")) {
				sql += " and g.raza = '" + raza + "'";
			}
			if (!tamano.equals("")) {
				sql += " and g.tamaño = '" + tamano + "'";
			}
			sql += ";";

			st = conn.prepareStatement(sql);
			rs = st.executeQuery();
			while (rs.next()) {
				Date fechaentrada = rs.getDate("FechaEntrada");
				long id = rs.getLong("IdAnimal");
				String nombre = rs.getString("Nombre");
				int edad = rs.getInt("Edad");
				boolean sociable = rs.getBoolean("Sociable");
				boolean enfermo = rs.getBoolean("Enfermo");
				String vtamano = rs.getString("Tamaño");
				String vraza = rs.getString("Raza");
				Perro p = new Perro(fechaentrada, id, nombre, edad, false,
						sociable, enfermo, vtamano, vraza);
				resul.add(p);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				st.close();
				conn.close();
			} catch (Exception e) {
				System.out.println("Error al cerrar conexion");
			}
		}

		return resul;
	}

	public List<Perro> getPerros(String idProtectora, String tamano, String raza) {
		List<Perro> resul = new LinkedList<Perro>();

		Connection conn = ConnectionManager.getInstance().checkOut();

		ResultSet rs = null;
		PreparedStatement st = null;

		try {
			String sql = "SELECT DISTINCT a.IdAnimal, a.Nombre, a.Edad, a.FechaEntrada, a.Sociable, a.Enfermo ,g.Tamaño,g.Raza";
			sql += " FROM animales a, protectora p, codigopostal cp, casadeacogida ca, perro g";
			sql += " where a.IdProtectora = p.IdProtectora";
			sql += " and a.IdAnimal = g.IdAnimal";
			sql += " and p.IdProtectora = " + idProtectora;
			sql += " and a.Adoptado = false";
			if (!raza.equals("")) {
				sql += " and g.raza = '" + raza + "'";
			}
			if (!tamano.equals("")) {
				sql += " and g.tamaño = '" + tamano + "'";
			}
			sql += ";";

			st = conn.prepareStatement(sql);
			rs = st.executeQuery();
			while (rs.next()) {
				Date fechaentrada = rs.getDate("FechaEntrada");
				long id = rs.getLong("IdAnimal");
				String nombre = rs.getString("Nombre");
				int edad = rs.getInt("Edad");
				boolean sociable = rs.getBoolean("Sociable");
				boolean enfermo = rs.getBoolean("Enfermo");
				String vtamano = rs.getString("Tamaño");
				String vraza = rs.getString("Raza");
				Perro p = new Perro(fechaentrada, id, nombre, edad, false,
						sociable, enfermo, vtamano, vraza);
				resul.add(p);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				st.close();
				conn.close();
			} catch (Exception e) {
				System.out.println("Error al cerrar conexion");
			}
		}

		return resul;
	}

	public boolean insertarPerro(String idAnimal, String tamano, String raza) {
		boolean resul = false;

		Connection conn = ConnectionManager.getInstance().checkOut();

		PreparedStatement st = null;

		try {
			String sql = "insert into perro (IdAnimal, Raza, Tamaño)";
			sql += "Values('" + idAnimal + "', '" + raza + "', '" + tamano
					+ "');";

			st = conn.prepareStatement(sql);
			resul = st.execute();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				st.close();
				conn.close();

			} catch (Exception e) {
				System.out.println("Error al cerrar conexion");
			}
		}
		return !resul;

	}

}
